home *** CD-ROM | disk | FTP | other *** search
/ The 640 MEG Shareware Studio 2 / The 640 Meg Shareware Studio CD-ROM Volume II (Data Express)(1993).ISO / pascal / tpsqapi1.zip / IOFILES.PAS < prev    next >
Pascal/Delphi Source File  |  1991-12-15  |  3KB  |  106 lines

  1. {$A-,I-,X+}
  2. UNIT IOFILES;
  3.  
  4. (*--------------------------------------------------------------------------
  5.                   (c) copyright 1988-91 Santronics Software
  6. ----------------------------------------------------------------------------*)
  7.  
  8. (*
  9.    This unit contains routines to open single byte stream files, and
  10.    lock and unlock file regions.
  11. *)
  12.  
  13.  
  14. interface
  15.  
  16. uses dos;
  17.  
  18. Type STREAM = file;
  19.  
  20. CONST
  21.      _KEEP_MODE  = -1;             (* DO NOT CHANGE FILE MODE IN FOPEN *)
  22.                                    (* share mode DOs 3++ and above *)
  23.  
  24.      _READONLY   = $00;         _DENYALL    = $10;
  25.      _WRITEONLY  = $01;         _DENYWRITE  = $20;
  26.      _READWRITE  = $02;         _DENYREAD   = $30;
  27.                                 _DENYNONE   = $40;
  28.  
  29. Const LockRegion   = 00;
  30.       UnLockRegion = 01;
  31.  
  32. function fopen(
  33.                  var fv   : stream;
  34.                      fn   : pathstr;
  35.                      mode : integer
  36.               ) : integer;
  37.  
  38. function  fclose(var fv : stream) : integer;
  39. Function  ShareLoaded : Boolean;
  40. Function  FileLock(handle : word; action : byte; start,bytes : longint; var ax : integer): Boolean;
  41.  
  42. implementation
  43.  
  44. function fopen;
  45. {open untyped file return the dos error code}
  46. var fm : byte;
  47.   begin
  48.     assign(fv,fn);
  49.     fm := filemode;
  50.     if mode <> _KEEP_MODE then filemode := mode;
  51.     reset(fv,1);
  52.     fopen := Ioresult;
  53.     filemode := fm;
  54.   end;
  55.  
  56. function  fclose(var fv : stream) : integer;
  57.   begin
  58.    close(fv);
  59.    fclose := ioresult;
  60.   end;
  61.  
  62. Function ShareLoaded : Boolean;
  63.   var reg : registers;
  64.  
  65.    begin
  66.  
  67.     reg.ax := $1000;
  68.     Intr($2F,reg);
  69.     ShareLoaded := ((reg.flags and $01) = 0) and (reg.al = $FF);
  70.  
  71.    end;
  72.  
  73. (*
  74.  
  75. Lock or Unlock region of file.
  76.  
  77. Input         : Handle  - turbo untype file variable handle (filerec(fv).handle)
  78. input         : action  - action to take. See constants above;
  79. input         : start   - beginging file position to lock.
  80. input         : bytes   - number of bytes to lock.
  81. output        : ax      - ax register return value
  82.  
  83. returns TRUE if lock is successful, False otherwise (check AX)
  84.  
  85. *)
  86.  
  87. Function FileLock(handle : word; action : byte; start,bytes : longint; var ax : integer): Boolean;
  88.   var reg : registers;
  89.  
  90.    begin
  91.  
  92.     reg.ax := $5C00 + action;
  93.     reg.bx := handle;
  94.     reg.cx := hi(start);
  95.     reg.dx := lo(start);
  96.     reg.si := hi(bytes);
  97.     reg.di := lo(bytes);
  98.  
  99.     Intr($21,reg);
  100.     FileLock := (reg.flags and $01) = $00;
  101.     ax := reg.ax;
  102.  
  103.    end;
  104.  
  105. end.
  106.